{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "kernelspec": {
      "language": "python",
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "pygments_lexer": "ipython3",
      "nbconvert_exporter": "python",
      "version": "3.7.7-final",
      "file_extension": ".py",
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "name": "python",
      "mimetype": "text/x-python"
    },
    "colab": {
      "name": "DCNN_Copy (1).ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "code",
      "metadata": {
        "id": "wojr9j1hdrEY",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Deep Convolution Neural Network-based Remaining Useful Life Prediction Using NASA Turbofan Dataset\n",
        "#This implementation uses only the sensor readings and rectified RUL"
      ],
      "execution_count": 1,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "tags": [],
        "id": "zZkagJ0X3fhE",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "4381e275-292d-4c25-d40c-49803283dfe4"
      },
      "source": [
        "import keras\n",
        "import keras.backend as K\n",
        "from keras.layers.core import Activation\n",
        "from keras.models import Sequential,load_model\n",
        "from keras.layers import Dense, Dropout, Conv1D\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "from sklearn import preprocessing"
      ],
      "execution_count": 2,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Using TensorFlow backend.\n"
          ],
          "name": "stderr"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wrqRcjqjovI9",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#Train_data is a cleaned train_FD001\n",
        "train_data=pd.read_csv(\"/content/sample_data/Train_data.csv\")\n",
        "\n",
        "#Engine number 21 sensor readings are used as the test\n",
        "test_data=pd.read_csv(\"/content/sample_data/train_21_engine_new.csv\")"
      ],
      "execution_count": 3,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "iWiXYQHi3fhK",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 222
        },
        "outputId": "8a74277f-465b-4004-b69c-33acce0da713"
      },
      "source": [
        "train_data.head()"
      ],
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>id</th>\n",
              "      <th>cycle</th>\n",
              "      <th>sensor2</th>\n",
              "      <th>sensor3</th>\n",
              "      <th>sensor4</th>\n",
              "      <th>sensor7</th>\n",
              "      <th>sensor8</th>\n",
              "      <th>sensor9</th>\n",
              "      <th>sensor11</th>\n",
              "      <th>sensor12</th>\n",
              "      <th>sensor13</th>\n",
              "      <th>sensor14</th>\n",
              "      <th>sensor15</th>\n",
              "      <th>sensor17</th>\n",
              "      <th>sensor20</th>\n",
              "      <th>sensor21</th>\n",
              "      <th>R_early</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "      <td>641.82</td>\n",
              "      <td>1589.70</td>\n",
              "      <td>1400.60</td>\n",
              "      <td>554.36</td>\n",
              "      <td>2388.06</td>\n",
              "      <td>9046.19</td>\n",
              "      <td>47.47</td>\n",
              "      <td>521.66</td>\n",
              "      <td>2388.02</td>\n",
              "      <td>8138.62</td>\n",
              "      <td>8.4195</td>\n",
              "      <td>392</td>\n",
              "      <td>39.06</td>\n",
              "      <td>23.4190</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "      <td>642.15</td>\n",
              "      <td>1591.82</td>\n",
              "      <td>1403.14</td>\n",
              "      <td>553.75</td>\n",
              "      <td>2388.04</td>\n",
              "      <td>9044.07</td>\n",
              "      <td>47.49</td>\n",
              "      <td>522.28</td>\n",
              "      <td>2388.07</td>\n",
              "      <td>8131.49</td>\n",
              "      <td>8.4318</td>\n",
              "      <td>392</td>\n",
              "      <td>39.00</td>\n",
              "      <td>23.4236</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>1</td>\n",
              "      <td>3</td>\n",
              "      <td>642.35</td>\n",
              "      <td>1587.99</td>\n",
              "      <td>1404.20</td>\n",
              "      <td>554.26</td>\n",
              "      <td>2388.08</td>\n",
              "      <td>9052.94</td>\n",
              "      <td>47.27</td>\n",
              "      <td>522.42</td>\n",
              "      <td>2388.03</td>\n",
              "      <td>8133.23</td>\n",
              "      <td>8.4178</td>\n",
              "      <td>390</td>\n",
              "      <td>38.95</td>\n",
              "      <td>23.3442</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>1</td>\n",
              "      <td>4</td>\n",
              "      <td>642.35</td>\n",
              "      <td>1582.79</td>\n",
              "      <td>1401.87</td>\n",
              "      <td>554.45</td>\n",
              "      <td>2388.11</td>\n",
              "      <td>9049.48</td>\n",
              "      <td>47.13</td>\n",
              "      <td>522.86</td>\n",
              "      <td>2388.08</td>\n",
              "      <td>8133.83</td>\n",
              "      <td>8.3682</td>\n",
              "      <td>392</td>\n",
              "      <td>38.88</td>\n",
              "      <td>23.3739</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>1</td>\n",
              "      <td>5</td>\n",
              "      <td>642.37</td>\n",
              "      <td>1582.85</td>\n",
              "      <td>1406.22</td>\n",
              "      <td>554.00</td>\n",
              "      <td>2388.06</td>\n",
              "      <td>9055.15</td>\n",
              "      <td>47.28</td>\n",
              "      <td>522.19</td>\n",
              "      <td>2388.04</td>\n",
              "      <td>8133.80</td>\n",
              "      <td>8.4294</td>\n",
              "      <td>393</td>\n",
              "      <td>38.90</td>\n",
              "      <td>23.4044</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   id  cycle  sensor2  sensor3  ...  sensor17  sensor20  sensor21  R_early\n",
              "0   1      1   641.82  1589.70  ...       392     39.06   23.4190      125\n",
              "1   1      2   642.15  1591.82  ...       392     39.00   23.4236      125\n",
              "2   1      3   642.35  1587.99  ...       390     38.95   23.3442      125\n",
              "3   1      4   642.35  1582.79  ...       392     38.88   23.3739      125\n",
              "4   1      5   642.37  1582.85  ...       393     38.90   23.4044      125\n",
              "\n",
              "[5 rows x 17 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 4
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "B7SLQPfk3fhN",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 222
        },
        "outputId": "271fe265-ad98-4014-feb2-6a10fd196687"
      },
      "source": [
        "test_data.head()"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>id</th>\n",
              "      <th>cycle</th>\n",
              "      <th>sensor2</th>\n",
              "      <th>sensor3</th>\n",
              "      <th>sensor4</th>\n",
              "      <th>sensor7</th>\n",
              "      <th>sensor8</th>\n",
              "      <th>sensor9</th>\n",
              "      <th>sensor11</th>\n",
              "      <th>sensor12</th>\n",
              "      <th>sensor13</th>\n",
              "      <th>sensor14</th>\n",
              "      <th>sensor15</th>\n",
              "      <th>sensor17</th>\n",
              "      <th>sensor20</th>\n",
              "      <th>sensor21</th>\n",
              "      <th>R_early</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>21</td>\n",
              "      <td>1</td>\n",
              "      <td>642.24</td>\n",
              "      <td>1582.88</td>\n",
              "      <td>1410.66</td>\n",
              "      <td>553.57</td>\n",
              "      <td>2388.07</td>\n",
              "      <td>9047.42</td>\n",
              "      <td>47.44</td>\n",
              "      <td>521.76</td>\n",
              "      <td>2388.06</td>\n",
              "      <td>8128.48</td>\n",
              "      <td>8.4181</td>\n",
              "      <td>395</td>\n",
              "      <td>38.90</td>\n",
              "      <td>23.3554</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>21</td>\n",
              "      <td>2</td>\n",
              "      <td>642.27</td>\n",
              "      <td>1582.13</td>\n",
              "      <td>1404.54</td>\n",
              "      <td>553.22</td>\n",
              "      <td>2388.03</td>\n",
              "      <td>9043.88</td>\n",
              "      <td>47.25</td>\n",
              "      <td>521.39</td>\n",
              "      <td>2388.05</td>\n",
              "      <td>8120.15</td>\n",
              "      <td>8.3895</td>\n",
              "      <td>392</td>\n",
              "      <td>38.81</td>\n",
              "      <td>23.2300</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>21</td>\n",
              "      <td>3</td>\n",
              "      <td>642.47</td>\n",
              "      <td>1589.73</td>\n",
              "      <td>1408.88</td>\n",
              "      <td>553.21</td>\n",
              "      <td>2388.11</td>\n",
              "      <td>9048.33</td>\n",
              "      <td>47.43</td>\n",
              "      <td>521.26</td>\n",
              "      <td>2388.12</td>\n",
              "      <td>8124.89</td>\n",
              "      <td>8.4454</td>\n",
              "      <td>392</td>\n",
              "      <td>38.69</td>\n",
              "      <td>23.3471</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>21</td>\n",
              "      <td>4</td>\n",
              "      <td>642.50</td>\n",
              "      <td>1587.18</td>\n",
              "      <td>1409.45</td>\n",
              "      <td>553.30</td>\n",
              "      <td>2388.05</td>\n",
              "      <td>9052.17</td>\n",
              "      <td>47.35</td>\n",
              "      <td>521.81</td>\n",
              "      <td>2388.08</td>\n",
              "      <td>8126.21</td>\n",
              "      <td>8.3913</td>\n",
              "      <td>393</td>\n",
              "      <td>39.00</td>\n",
              "      <td>23.4179</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>21</td>\n",
              "      <td>5</td>\n",
              "      <td>642.21</td>\n",
              "      <td>1596.51</td>\n",
              "      <td>1401.46</td>\n",
              "      <td>553.03</td>\n",
              "      <td>2388.04</td>\n",
              "      <td>9047.48</td>\n",
              "      <td>47.57</td>\n",
              "      <td>521.82</td>\n",
              "      <td>2388.10</td>\n",
              "      <td>8130.92</td>\n",
              "      <td>8.4825</td>\n",
              "      <td>393</td>\n",
              "      <td>38.88</td>\n",
              "      <td>23.2637</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   id  cycle  sensor2  sensor3  ...  sensor17  sensor20  sensor21  R_early\n",
              "0  21      1   642.24  1582.88  ...       395     38.90   23.3554      125\n",
              "1  21      2   642.27  1582.13  ...       392     38.81   23.2300      125\n",
              "2  21      3   642.47  1589.73  ...       392     38.69   23.3471      125\n",
              "3  21      4   642.50  1587.18  ...       393     39.00   23.4179      125\n",
              "4  21      5   642.21  1596.51  ...       393     38.88   23.2637      125\n",
              "\n",
              "[5 rows x 17 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 5
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "A9gO_kR13fhP",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 156
        },
        "outputId": "f6ff9fac-7059-49fe-fa33-c690b3b69646"
      },
      "source": [
        "#Normalize the training set\n",
        "cols_normalize = train_data.columns.difference(['id','cycle','R_early'])\n",
        "min_max_scaler = preprocessing.MinMaxScaler()\n",
        "norm_train_df = pd.DataFrame(min_max_scaler.fit_transform(train_data[cols_normalize]), \n",
        "                             columns=cols_normalize, \n",
        "                             index=train_data.index)\n",
        "join_df = train_data[train_data.columns.difference(cols_normalize)].join(norm_train_df)\n",
        "train_data = join_df.reindex(columns = train_data.columns)\n",
        "print(train_data.head())"
      ],
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "   id  cycle   sensor2   sensor3  ...  sensor17  sensor20  sensor21  R_early\n",
            "0   1      1  0.183735  0.406802  ...  0.333333  0.713178  0.724662      125\n",
            "1   1      2  0.283133  0.453019  ...  0.333333  0.666667  0.731014      125\n",
            "2   1      3  0.343373  0.369523  ...  0.166667  0.627907  0.621375      125\n",
            "3   1      4  0.343373  0.256159  ...  0.333333  0.573643  0.662386      125\n",
            "4   1      5  0.349398  0.257467  ...  0.416667  0.589147  0.704502      125\n",
            "\n",
            "[5 rows x 17 columns]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "tags": [],
        "id": "ufuFJaaf3fhS",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 156
        },
        "outputId": "b6129b05-4ffe-41c6-e25a-3ab0f3f3c2b4"
      },
      "source": [
        "#Normalize the test set\n",
        "norm_test_df = pd.DataFrame(min_max_scaler.transform(test_data[cols_normalize]), \n",
        "                            columns=cols_normalize, \n",
        "                            index=test_data.index)\n",
        "test_join_df = test_data[test_data.columns.difference(cols_normalize)].join(norm_test_df)\n",
        "test_data = test_join_df.reindex(columns = test_data.columns)\n",
        "test_data = test_data.reset_index(drop=True)\n",
        "print(test_data.head())"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "   id  cycle   sensor2   sensor3  ...  sensor17  sensor20  sensor21  R_early\n",
            "0  21      1  0.310241  0.258121  ...  0.583333  0.589147  0.636841      125\n",
            "1  21      2  0.319277  0.241770  ...  0.333333  0.519380  0.463684      125\n",
            "2  21      3  0.379518  0.407456  ...  0.333333  0.426357  0.625380      125\n",
            "3  21      4  0.388554  0.351864  ...  0.416667  0.666667  0.723143      125\n",
            "4  21      5  0.301205  0.555265  ...  0.416667  0.573643  0.510218      125\n",
            "\n",
            "[5 rows x 17 columns]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "O2AUsg-t3fhU",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 222
        },
        "outputId": "2e7b5221-83ec-4b17-8924-d9673df25fa5"
      },
      "source": [
        "train_data.head()"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>id</th>\n",
              "      <th>cycle</th>\n",
              "      <th>sensor2</th>\n",
              "      <th>sensor3</th>\n",
              "      <th>sensor4</th>\n",
              "      <th>sensor7</th>\n",
              "      <th>sensor8</th>\n",
              "      <th>sensor9</th>\n",
              "      <th>sensor11</th>\n",
              "      <th>sensor12</th>\n",
              "      <th>sensor13</th>\n",
              "      <th>sensor14</th>\n",
              "      <th>sensor15</th>\n",
              "      <th>sensor17</th>\n",
              "      <th>sensor20</th>\n",
              "      <th>sensor21</th>\n",
              "      <th>R_early</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "      <td>0.183735</td>\n",
              "      <td>0.406802</td>\n",
              "      <td>0.309757</td>\n",
              "      <td>0.726248</td>\n",
              "      <td>0.242424</td>\n",
              "      <td>0.109755</td>\n",
              "      <td>0.369048</td>\n",
              "      <td>0.633262</td>\n",
              "      <td>0.205882</td>\n",
              "      <td>0.199608</td>\n",
              "      <td>0.363986</td>\n",
              "      <td>0.333333</td>\n",
              "      <td>0.713178</td>\n",
              "      <td>0.724662</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>1</td>\n",
              "      <td>2</td>\n",
              "      <td>0.283133</td>\n",
              "      <td>0.453019</td>\n",
              "      <td>0.352633</td>\n",
              "      <td>0.628019</td>\n",
              "      <td>0.212121</td>\n",
              "      <td>0.100242</td>\n",
              "      <td>0.380952</td>\n",
              "      <td>0.765458</td>\n",
              "      <td>0.279412</td>\n",
              "      <td>0.162813</td>\n",
              "      <td>0.411312</td>\n",
              "      <td>0.333333</td>\n",
              "      <td>0.666667</td>\n",
              "      <td>0.731014</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>1</td>\n",
              "      <td>3</td>\n",
              "      <td>0.343373</td>\n",
              "      <td>0.369523</td>\n",
              "      <td>0.370527</td>\n",
              "      <td>0.710145</td>\n",
              "      <td>0.272727</td>\n",
              "      <td>0.140043</td>\n",
              "      <td>0.250000</td>\n",
              "      <td>0.795309</td>\n",
              "      <td>0.220588</td>\n",
              "      <td>0.171793</td>\n",
              "      <td>0.357445</td>\n",
              "      <td>0.166667</td>\n",
              "      <td>0.627907</td>\n",
              "      <td>0.621375</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>1</td>\n",
              "      <td>4</td>\n",
              "      <td>0.343373</td>\n",
              "      <td>0.256159</td>\n",
              "      <td>0.331195</td>\n",
              "      <td>0.740741</td>\n",
              "      <td>0.318182</td>\n",
              "      <td>0.124518</td>\n",
              "      <td>0.166667</td>\n",
              "      <td>0.889126</td>\n",
              "      <td>0.294118</td>\n",
              "      <td>0.174889</td>\n",
              "      <td>0.166603</td>\n",
              "      <td>0.333333</td>\n",
              "      <td>0.573643</td>\n",
              "      <td>0.662386</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>1</td>\n",
              "      <td>5</td>\n",
              "      <td>0.349398</td>\n",
              "      <td>0.257467</td>\n",
              "      <td>0.404625</td>\n",
              "      <td>0.668277</td>\n",
              "      <td>0.242424</td>\n",
              "      <td>0.149960</td>\n",
              "      <td>0.255952</td>\n",
              "      <td>0.746269</td>\n",
              "      <td>0.235294</td>\n",
              "      <td>0.174734</td>\n",
              "      <td>0.402078</td>\n",
              "      <td>0.416667</td>\n",
              "      <td>0.589147</td>\n",
              "      <td>0.704502</td>\n",
              "      <td>125</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   id  cycle   sensor2   sensor3  ...  sensor17  sensor20  sensor21  R_early\n",
              "0   1      1  0.183735  0.406802  ...  0.333333  0.713178  0.724662      125\n",
              "1   1      2  0.283133  0.453019  ...  0.333333  0.666667  0.731014      125\n",
              "2   1      3  0.343373  0.369523  ...  0.166667  0.627907  0.621375      125\n",
              "3   1      4  0.343373  0.256159  ...  0.333333  0.573643  0.662386      125\n",
              "4   1      5  0.349398  0.257467  ...  0.416667  0.589147  0.704502      125\n",
              "\n",
              "[5 rows x 17 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 8
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "VcOtE7qd3fhX",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        ""
      ],
      "execution_count": 8,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wQg377Tr3fhZ",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Sliding window size of 40 cycles\n",
        "sequence_length = 40\n",
        "\n",
        "# function to reshape features into (samples, time steps, features) \n",
        "\n",
        "def gen_sequence(id_df, seq_length, seq_cols):\n",
        "\n",
        "    data_matrix = id_df[seq_cols].values\n",
        "    num_elements = data_matrix.shape[0]\n",
        "\n",
        "    for start, stop in zip(range(0, num_elements-seq_length),\n",
        "                           range(seq_length, num_elements)):\n",
        "        yield data_matrix[start:stop, :]"
      ],
      "execution_count": 9,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "tags": [],
        "id": "V4GeRGbU3fhc",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "8199ea23-fd2e-4a2e-fe0c-df173fdc7da3"
      },
      "source": [
        "#  Select useful sensors only feature columns\n",
        "sequence_cols = ['sensor2','sensor3','sensor4','sensor7','sensor8','sensor9',\n",
        "                 'sensor11','sensor12','sensor13','sensor14','sensor15',\n",
        "                 'sensor17','sensor20','sensor21']\n",
        "\n",
        "# generator for the sequences\n",
        "# transform each id of the train dataset in a sequence\n",
        "seq_gen = (list(gen_sequence(train_data[train_data['id']==id], \n",
        "                             sequence_length, sequence_cols)) \n",
        "           for id in train_data['id'].unique())\n",
        "\n",
        "# generate sequences and convert to numpy array\n",
        "seq_array = np.concatenate(list(seq_gen)).astype(np.float32)\n",
        "print(seq_array.shape)\n"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(16631, 40, 14)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bCTPbJyy3fhf",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "5393e806-17c7-40c0-cf3e-fac085edf1ed"
      },
      "source": [
        "# function to generate labels\n",
        "def gen_labels(id_df, seq_length, label):\n",
        "\n",
        "    data_matrix = id_df[label].values\n",
        "    num_elements = data_matrix.shape[0]\n",
        "\n",
        "    return data_matrix[seq_length:num_elements, :]\n",
        "\n",
        "# generate labels\n",
        "label_gen = [gen_labels(train_data[train_data['id']==id], sequence_length,\n",
        "                        ['R_early']) \n",
        "             for id in train_data['id'].unique()]\n",
        "\n",
        "label_array = np.concatenate(label_gen).astype(np.float32)\n",
        "label_array.shape"
      ],
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(16631, 1)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 11
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1ubzfn753fhi",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Metrics using keras backend\n",
        "def r2_keras(y_true, y_pred):\n",
        "    \"\"\"Coefficient of Determination \n",
        "    \"\"\"\n",
        "    SS_res =  K.sum(K.square( y_true - y_pred ))\n",
        "    SS_tot = K.sum(K.square( y_true - K.mean(y_true) ) )\n",
        "    return ( 1 - SS_res/(SS_tot + K.epsilon()) )\n",
        "\n",
        "def rmse(y_true, y_pred):\n",
        "    return K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1))"
      ],
      "execution_count": 12,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9tHNGc3m3fhk",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "nb_features = seq_array.shape[2]\n",
        "nb_out = label_array.shape[1]"
      ],
      "execution_count": 13,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "colab_type": "text",
        "id": "Tmgn10YAdrFk"
      },
      "source": [
        "# Create Model"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "tags": [],
        "id": "WGJIN-Hb3fhr",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Clear artifacts and set random seed to ensure repeatability\n",
        "keras.backend.clear_session()\n",
        "np.random.seed(42)\n",
        "\n",
        "#Create model\n",
        "\n",
        "def DCNN():\n",
        "    model = keras.models.Sequential()\n",
        "    model.add(keras.layers.Conv1D(32, 8, padding='same', activation='relu',\n",
        "                                  input_shape=(sequence_length,nb_features)))\n",
        "    model.add(keras.layers.Conv1D(64, 8, padding='same', activation='relu'))\n",
        "    model.add(keras.layers.Conv1D(64, 8, padding='same', activation='relu'))\n",
        "    model.add(keras.layers.Conv1D(32, 8, padding='same', activation='relu'))\n",
        "    model.add(keras.layers.GlobalMaxPooling1D())\n",
        "    model.add(keras.layers.Dropout(0.5))\n",
        "    #model.add(keras.layers.Flatten())\n",
        "    model.add(keras.layers.Dense(100, activation='linear'))\n",
        "    model.add(keras.layers.Dropout(0.2))\n",
        "    model.add(keras.layers.Dense(units=nb_out))\n",
        "    optimizer = keras.optimizers.rmsprop(lr=1e-5)\n",
        "    model.compile(loss=keras.losses.Huber(),\n",
        "              optimizer=optimizer,\n",
        "              metrics=([rmse,r2_keras]))\n",
        "    return model\n",
        "\n",
        "#Creat model checkpoint to save the best model performance\n",
        "model_checkpoint = keras.callbacks.ModelCheckpoint(\n",
        "    \"my_checkpoint.h5\", save_best_only=True)\n",
        "\n",
        "#specify ealy_callback to stop training model if there's no improvement after 10 epochs    \n",
        "early_stopping = keras.callbacks.EarlyStopping(patience=10)"
      ],
      "execution_count": 14,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "tags": [],
        "id": "Qo8NNFW83fhw",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 497
        },
        "outputId": "8d446d38-3767-4663-be8c-c191355bb1ec"
      },
      "source": [
        "# Check the model architecture\n",
        "\n",
        "New_DCNN=DCNN()\n",
        "New_DCNN.summary()\n",
        "\n",
        "# `rankdir='LR'` is to make the graph horizontal.\n",
        "keras.utils.plot_model(New_DCNN, show_shapes=True, rankdir=\"LR\")          "
      ],
      "execution_count": 15,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"sequential_1\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "conv1d_1 (Conv1D)            (None, 40, 32)            3616      \n",
            "_________________________________________________________________\n",
            "conv1d_2 (Conv1D)            (None, 40, 64)            16448     \n",
            "_________________________________________________________________\n",
            "conv1d_3 (Conv1D)            (None, 40, 64)            32832     \n",
            "_________________________________________________________________\n",
            "conv1d_4 (Conv1D)            (None, 40, 32)            16416     \n",
            "_________________________________________________________________\n",
            "global_max_pooling1d_1 (Glob (None, 32)                0         \n",
            "_________________________________________________________________\n",
            "dropout_1 (Dropout)          (None, 32)                0         \n",
            "_________________________________________________________________\n",
            "dense_1 (Dense)              (None, 100)               3300      \n",
            "_________________________________________________________________\n",
            "dropout_2 (Dropout)          (None, 100)               0         \n",
            "_________________________________________________________________\n",
            "dense_2 (Dense)              (None, 1)                 101       \n",
            "=================================================================\n",
            "Total params: 72,713\n",
            "Trainable params: 72,713\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "image/png": "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LSUlRb1jw4njRQx/qD2pfouTtlqXV2mctnj33Xfn5OTcc889hYWFzz33nM8DcLzy435+vJ0995zCqL+ITsz9G//06dNOywsLC9u0aWOz2Ww2W+fOneufrhjchCkpKUOHDj1x4sTSpUuFEPn5+SNHjlQn3w1vm620tNRms6WkpDz44IM33HDDl19+qe72rdhR7rF7r8/bDHpbd/37KEtw30JhPjlQuc+U/jdHHPeKbdu2bdas2a233jplypRffvnF21UZwzEdIfwy4VHIH1a8vS7tHocVeMVCh5jgJUWql2m8YN0wpH6IU2pqqtPykydPin//8axJTU1V/3/Fo8TExLvvvvuLL75Q71h88cUX1c9k9ujAgQNCiLS0ND1PlkpMTIz635ayCerA3n333SuuuCItLS0mJubhhx/Wlttstnvuuefnn3/++OOPhRD//Oc/77jjDvUh9VrM448/bvu3vXv3eryIDBOxl1Cde+656qeIu3+aWdPinjrsTp06+b8qWEtI5nfp0qXPPPPMp59+eu655+r8FfILKwrJ/Nrt9rS0tGuuuWbp0qXFxcXq/767R35hRaGU340bNxYVFd15550+/C75hX433HDD119//dZbb1VWVm7dunXVqlX/+7//6/LOAB8axm63a7cgNHQRI3jcb3H69Onl5eV67qB1T7vy435+/Iybe/qL6MSsv/EzMzNjYmJ++uknp+WDBw/es2dPZmZm8+bNf/jhh2bNmjk9wfgmHDlypBDipZdeOnny5LJly+655x6XT/On2dR/5K2pqTlw4MA//vGPzMxMPS9Wzo5yj917fd5m0Ie669xHWYL7FgrzyYHKfaZ8e3MkLi5u3bp1vXv3nj59etu2bYcMGVJZWSnb+yyO6QjhlwmPQvuw4sN1afc4rMArVjnEBDUp8rxMUwTrhqFzzjlHCHHs2DGn5erFTacdx8mTJ1u2bKlzzaNGjbLb7fn5+evXr2/VqlVWVpae34qNjRVCnD17VudWJFFdXe3V5BgmGANbv369+qnv+/btGzBgQIsWLbZs2VJaWvrss886Pm348OGxsbGvvvrqzp07k5OTtWsN6o4sPz/f8RO0Nm3aFMARIrDYS6hiYmKuvfbaY8eOff755/Uf/f3339X3UcyaFvfee+89IcT111/v/6pgLaGX3zlz5ixevHjdunXqS9OJ/MKKQi+/jtq1axcZGVlcXOzxmeQXVhRK+V2wYMHHH38cERGhXjpR/5qbPn26zWZTv83HDfIL/aZMmXLVVVcNHz48OTl54MCBgwcPfuWVV1w+09uGqamp+f3331u3bi08XcQIBvdbrK6ufvDBB2fNmrVp06Zp06b5vBXHKz/u58f/uLmhv4hOzPobPzY29o9//OPRo0c3b97s1S8a34QXXnhhdnb2l19+OWLEiEGDBjVq1Kj+c4LUbFbsKPfYvdfnbQa9rbv+fZQluG+hMJ8cqNxnyuc3R7p27frOO+8cPHhwwoQJBQUFM2fOlO19Fsd0hPDLhEchfFjx7bq0exxW4BVLHGKCnRRJXqZZgnXD0Lnnntu4ceMPPvjAafl5552XmJjoeAVwy5YtVVVVl1xyic41t2zZcvDgwcuXL580adLo0aN1/tZ5550XERHx2Wef6Xy+JD799FNFUbKzs9Ufo6KiGvqOMIMFY2Bff/11QkKCEKKoqKi6unrkyJFt27aNjY212WyOT2vUqFFubu6qVatmzpx51113actbtWoVGxu7bds2P4cBw7CX0EyZMiUmJmbs2LGVlZVOD33//fdRUVHCvGlx49ChQ/n5+S1btvzrX//q/9pgLaGUX0VRJkyYUFRUtGrVKqf/jdCD/MJyQim/x48fHzp0qOOS3bt319bWtmrVSs+vk19YTijld+HChY7XTdR/VZw4caKiKI6fbd4Q8gudiouLS0pKjh49Wl1dvW/fvnnz5rm8JUJ43zCffPJJXV3dxRdfLDxdxAgG91t84IEH7rrrrjFjxowdO/app57y+bqk45Uf9/Pjf9zc0F9EJyb+jf/kk0/a7fbx48d7da3MlCZUP2Ro+fLlY8aMcfmEIDWbFTvKDXbvLnmbQW/rrn8fJWS6qO6SxxYK58mBxn2mfHtz5ODBgzt27BBCpKWlPf300xdffPGOHTukep/FKR2h+jKhR0geVvy8Lt0QDivwluSHGGOSYvrLNFewbhiKiYl57LHH1q9fP2rUqF9//bWuru7UqVM7duyIjY0dN27cypUrFy9eXFZWVlRUdO+996anp48YMUL/yseNG1dTU3PixImrrrpK56+kpaXdfPPNy5cvX7BgQVlZ2fbt2+fPn+/TKwu6urq6EydO1NTUbN++ffTo0a1btx4+fLj6ULt27X7//fdVq1ZVV1cfPXp07969jr/YuHHjgwcP/vLLL6dOnaqurl67dm1ycvL06dNlG1j9NVdXVx8+fPjTTz9VbxhS/zvqo48+OnPmzO7du+t/8+W999579uzZ1atX33jjjdrC2NjY22+/fcmSJfPmzSsrK6utrT1w4MBvv/0WqJePgAurvYT7PF544YVvvPHG999/36dPnzVr1pSWllZXV+/Zs+eVV16544477Ha7EMKsadEoilJeXl5XV6e+o1NQUHDZZZdFRkauWrWqoa/CRQgLpfzu2LHjueeee+WVV+x2u83BzJkz1SeQX4SYUMpvQkLCBx98sG7durKysurq6m+//fYvf/lLQkLC2LFj1SeQX4SYUMqvR+QXAXH//fe3bt26vLzc4zP1NExVVVVpaWlNTc0333wzatSozMxM9aqIx4sYAedmi3Pnzs3IyBg4cKAQIi8vr0uXLsOGDVO/0FCPhq78uJ+fgMStIfqL6MTEfdQll1yyaNGir7/++oorrnjvvfd+++23mpqavXv3Llq06Pfff29onaY04eDBg5s2bTpgwIC2bdu6fEKQms2KHaVh966TtxnUU3ff9lHC72vX+um5IO9DC4XG5MBP7jPl25sjBw8evOeee3788ceqqqpvv/1279692dnZQXqfJSDpkP9lInhC8rDi53VpFYcV+E/yQ4wxSTH9ZZrM8b/6CgoKnJb46YUXXujWrVtsbGxsbOxFF100d+5cRVHq6upmzJjRvn17u93eqFGjAQMG7Ny5U33+3Llz4+PjhRDt27cvKSmZP3++WqTMzMxdu3Y5rvnKK6989dVXnTa3adOmyy67LD09XX1pLVq06NWr12effaY+eurUqTvvvLNJkyaJiYm9e/eePHmyEKJly5bfffedxxfifs1uzJkzp0WLFkKI+Pj4/v37e3yBI0aMsNvtGRkZUVFRycnJN910U0lJiba248ePX3nllbGxsW3atHnggQfGjx8vhGjXrt2+ffsURfnmm28yMzPj4uJ69+596NChNWvWJCUlTZs2rf6oNm/e3LVr14iICPW1TJ8+3bCBvfjii24+yH3lypXqCidMmNC4cePU1NRBgwa98MILQoisrCx1baqLLrro0UcfdXpdZ8+enTBhQuvWraOiotS9W3Fx8bPPPhsXFyeEaNWq1aJFizyWTL+A58VPso1HpzDZS7jJo2bfvn0PPfRQt27dEhMTIyMjU1NT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\n",
            "text/plain": [
              "<IPython.core.display.Image object>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 15
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "tags": [],
        "id": "-QK_Npfo3fh1",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "outputId": "762b5e59-41c7-4135-d015-7b7e908e289a"
      },
      "source": [
        "# Train the model\n",
        "history = New_DCNN.fit(seq_array,label_array, epochs=500, batch_size=200,\n",
        "                       validation_split=0.2,callbacks=[early_stopping, \n",
        "                        model_checkpoint])"
      ],
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Train on 13304 samples, validate on 3327 samples\n",
            "Epoch 1/500\n",
            "13304/13304 [==============================] - 3s 208us/step - loss: 75.8553 - rmse: 76.3534 - r2_keras: -3.4335 - val_loss: 81.2542 - val_rmse: 81.7528 - val_r2_keras: -8.7137\n",
            "Epoch 2/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 75.4478 - rmse: 75.9459 - r2_keras: -3.4030 - val_loss: 80.7800 - val_rmse: 81.2772 - val_r2_keras: -8.6280\n",
            "Epoch 3/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 74.8896 - rmse: 75.3878 - r2_keras: -3.3499 - val_loss: 80.1187 - val_rmse: 80.6170 - val_r2_keras: -8.5082\n",
            "Epoch 4/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 74.1053 - rmse: 74.6035 - r2_keras: -3.2874 - val_loss: 79.1926 - val_rmse: 79.6909 - val_r2_keras: -8.3398\n",
            "Epoch 5/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 73.0291 - rmse: 73.5270 - r2_keras: -3.1740 - val_loss: 77.9145 - val_rmse: 78.4120 - val_r2_keras: -8.1069\n",
            "Epoch 6/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 71.5063 - rmse: 72.0042 - r2_keras: -3.0400 - val_loss: 76.1790 - val_rmse: 76.6766 - val_r2_keras: -7.7895\n",
            "Epoch 7/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 69.5369 - rmse: 70.0349 - r2_keras: -2.8626 - val_loss: 73.8090 - val_rmse: 74.3075 - val_r2_keras: -7.3546\n",
            "Epoch 8/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 66.8064 - rmse: 67.3045 - r2_keras: -2.6203 - val_loss: 70.6761 - val_rmse: 71.1741 - val_r2_keras: -6.7795\n",
            "Epoch 9/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 63.3884 - rmse: 63.8864 - r2_keras: -2.3032 - val_loss: 66.6989 - val_rmse: 67.1973 - val_r2_keras: -6.0497\n",
            "Epoch 10/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 59.2076 - rmse: 59.7055 - r2_keras: -1.9400 - val_loss: 61.7967 - val_rmse: 62.2949 - val_r2_keras: -5.1530\n",
            "Epoch 11/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 54.3020 - rmse: 54.7997 - r2_keras: -1.4997 - val_loss: 56.0266 - val_rmse: 56.5246 - val_r2_keras: -4.1021\n",
            "Epoch 12/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 48.8506 - rmse: 49.3486 - r2_keras: -1.0219 - val_loss: 49.6958 - val_rmse: 50.1939 - val_r2_keras: -2.9517\n",
            "Epoch 13/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 43.7439 - rmse: 44.2421 - r2_keras: -0.5906 - val_loss: 43.7061 - val_rmse: 44.2044 - val_r2_keras: -1.8695\n",
            "Epoch 14/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 39.8225 - rmse: 40.3204 - r2_keras: -0.2960 - val_loss: 39.1646 - val_rmse: 39.6626 - val_r2_keras: -1.0678\n",
            "Epoch 15/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 38.3446 - rmse: 38.8425 - r2_keras: -0.2089 - val_loss: 37.3241 - val_rmse: 37.8223 - val_r2_keras: -0.7868\n",
            "Epoch 16/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 37.3518 - rmse: 37.8496 - r2_keras: -0.1535 - val_loss: 36.4280 - val_rmse: 36.9261 - val_r2_keras: -0.6824\n",
            "Epoch 17/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 37.0003 - rmse: 37.4978 - r2_keras: -0.1362 - val_loss: 35.7086 - val_rmse: 36.2067 - val_r2_keras: -0.6158\n",
            "Epoch 18/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 36.5225 - rmse: 37.0203 - r2_keras: -0.1084 - val_loss: 35.0530 - val_rmse: 35.5510 - val_r2_keras: -0.5635\n",
            "Epoch 19/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 35.7160 - rmse: 36.2140 - r2_keras: -0.0616 - val_loss: 34.4022 - val_rmse: 34.9003 - val_r2_keras: -0.5132\n",
            "Epoch 20/500\n",
            "13304/13304 [==============================] - 1s 61us/step - loss: 34.9856 - rmse: 35.4828 - r2_keras: -0.0271 - val_loss: 33.6884 - val_rmse: 34.1862 - val_r2_keras: -0.4567\n",
            "Epoch 21/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 34.3505 - rmse: 34.8480 - r2_keras: 0.0094 - val_loss: 33.1132 - val_rmse: 33.6112 - val_r2_keras: -0.4247\n",
            "Epoch 22/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 33.6861 - rmse: 34.1837 - r2_keras: 0.0465 - val_loss: 32.1829 - val_rmse: 32.6810 - val_r2_keras: -0.3482\n",
            "Epoch 23/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 32.8830 - rmse: 33.3807 - r2_keras: 0.0878 - val_loss: 31.3844 - val_rmse: 31.8821 - val_r2_keras: -0.2945\n",
            "Epoch 24/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 32.4815 - rmse: 32.9790 - r2_keras: 0.1108 - val_loss: 30.5069 - val_rmse: 31.0048 - val_r2_keras: -0.2357\n",
            "Epoch 25/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 31.9147 - rmse: 32.4120 - r2_keras: 0.1318 - val_loss: 29.7275 - val_rmse: 30.2253 - val_r2_keras: -0.1915\n",
            "Epoch 26/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 30.9475 - rmse: 31.4448 - r2_keras: 0.1778 - val_loss: 28.8313 - val_rmse: 29.3290 - val_r2_keras: -0.1363\n",
            "Epoch 27/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 30.6304 - rmse: 31.1277 - r2_keras: 0.1963 - val_loss: 28.3798 - val_rmse: 28.8775 - val_r2_keras: -0.1404\n",
            "Epoch 28/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 30.1858 - rmse: 30.6825 - r2_keras: 0.2043 - val_loss: 28.0351 - val_rmse: 28.5324 - val_r2_keras: -0.1482\n",
            "Epoch 29/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 29.5127 - rmse: 30.0097 - r2_keras: 0.2296 - val_loss: 27.0791 - val_rmse: 27.5764 - val_r2_keras: -0.0779\n",
            "Epoch 30/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 29.1878 - rmse: 29.6845 - r2_keras: 0.2383 - val_loss: 26.9071 - val_rmse: 27.4045 - val_r2_keras: -0.0958\n",
            "Epoch 31/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 28.9035 - rmse: 29.3997 - r2_keras: 0.2468 - val_loss: 26.1565 - val_rmse: 26.6538 - val_r2_keras: -0.0368\n",
            "Epoch 32/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 28.5784 - rmse: 29.0751 - r2_keras: 0.2552 - val_loss: 25.8971 - val_rmse: 26.3942 - val_r2_keras: -0.0306\n",
            "Epoch 33/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 28.5560 - rmse: 29.0521 - r2_keras: 0.2517 - val_loss: 26.0048 - val_rmse: 26.5018 - val_r2_keras: -0.0594\n",
            "Epoch 34/500\n",
            "13304/13304 [==============================] - 1s 61us/step - loss: 28.3661 - rmse: 28.8629 - r2_keras: 0.2527 - val_loss: 25.3028 - val_rmse: 25.8002 - val_r2_keras: 0.0052\n",
            "Epoch 35/500\n",
            "13304/13304 [==============================] - 1s 61us/step - loss: 28.0740 - rmse: 28.5706 - r2_keras: 0.2697 - val_loss: 24.8696 - val_rmse: 25.3641 - val_r2_keras: 0.0399\n",
            "Epoch 36/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 27.7253 - rmse: 28.2216 - r2_keras: 0.2842 - val_loss: 25.3401 - val_rmse: 25.8368 - val_r2_keras: -0.0183\n",
            "Epoch 37/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 27.6474 - rmse: 28.1436 - r2_keras: 0.2868 - val_loss: 24.7980 - val_rmse: 25.2924 - val_r2_keras: 0.0319\n",
            "Epoch 38/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 27.6574 - rmse: 28.1539 - r2_keras: 0.2879 - val_loss: 24.8776 - val_rmse: 25.3732 - val_r2_keras: 0.0208\n",
            "Epoch 39/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 27.4534 - rmse: 27.9499 - r2_keras: 0.2926 - val_loss: 24.9426 - val_rmse: 25.4385 - val_r2_keras: 0.0072\n",
            "Epoch 40/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 27.1543 - rmse: 27.6504 - r2_keras: 0.3051 - val_loss: 24.8118 - val_rmse: 25.3069 - val_r2_keras: 0.0184\n",
            "Epoch 41/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 27.1224 - rmse: 27.6184 - r2_keras: 0.3071 - val_loss: 24.4379 - val_rmse: 24.9319 - val_r2_keras: 0.0538\n",
            "Epoch 42/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 26.9048 - rmse: 27.4010 - r2_keras: 0.3141 - val_loss: 24.9236 - val_rmse: 25.4207 - val_r2_keras: -3.6564e-04\n",
            "Epoch 43/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 26.7927 - rmse: 27.2892 - r2_keras: 0.3200 - val_loss: 24.4896 - val_rmse: 24.9842 - val_r2_keras: 0.0418\n",
            "Epoch 44/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 26.4767 - rmse: 26.9722 - r2_keras: 0.3345 - val_loss: 24.0515 - val_rmse: 24.5484 - val_r2_keras: 0.0856\n",
            "Epoch 45/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 26.3768 - rmse: 26.8732 - r2_keras: 0.3382 - val_loss: 24.3346 - val_rmse: 24.8275 - val_r2_keras: 0.0508\n",
            "Epoch 46/500\n",
            "13304/13304 [==============================] - 1s 61us/step - loss: 26.1510 - rmse: 26.6468 - r2_keras: 0.3482 - val_loss: 24.6333 - val_rmse: 25.1287 - val_r2_keras: 0.0144\n",
            "Epoch 47/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 26.1566 - rmse: 26.6521 - r2_keras: 0.3424 - val_loss: 24.1940 - val_rmse: 24.6864 - val_r2_keras: 0.0572\n",
            "Epoch 48/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 25.9485 - rmse: 26.4440 - r2_keras: 0.3568 - val_loss: 24.0319 - val_rmse: 24.5265 - val_r2_keras: 0.0705\n",
            "Epoch 49/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 25.9568 - rmse: 26.4521 - r2_keras: 0.3515 - val_loss: 23.7934 - val_rmse: 24.2898 - val_r2_keras: 0.0924\n",
            "Epoch 50/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 25.5670 - rmse: 26.0626 - r2_keras: 0.3681 - val_loss: 24.1226 - val_rmse: 24.6168 - val_r2_keras: 0.0526\n",
            "Epoch 51/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 25.5846 - rmse: 26.0801 - r2_keras: 0.3667 - val_loss: 24.0567 - val_rmse: 24.5496 - val_r2_keras: 0.0546\n",
            "Epoch 52/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 25.3722 - rmse: 25.8678 - r2_keras: 0.3743 - val_loss: 23.3586 - val_rmse: 23.8546 - val_r2_keras: 0.1279\n",
            "Epoch 53/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 25.2164 - rmse: 25.7117 - r2_keras: 0.3845 - val_loss: 23.9707 - val_rmse: 24.4629 - val_r2_keras: 0.0562\n",
            "Epoch 54/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 25.2317 - rmse: 25.7266 - r2_keras: 0.3799 - val_loss: 23.3952 - val_rmse: 23.8904 - val_r2_keras: 0.1154\n",
            "Epoch 55/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 25.0508 - rmse: 25.5464 - r2_keras: 0.3906 - val_loss: 23.2422 - val_rmse: 23.7377 - val_r2_keras: 0.1290\n",
            "Epoch 56/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 25.0347 - rmse: 25.5297 - r2_keras: 0.3937 - val_loss: 23.3089 - val_rmse: 23.8040 - val_r2_keras: 0.1170\n",
            "Epoch 57/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 24.6360 - rmse: 25.1309 - r2_keras: 0.4021 - val_loss: 23.6787 - val_rmse: 24.1707 - val_r2_keras: 0.0751\n",
            "Epoch 58/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 24.7015 - rmse: 25.1962 - r2_keras: 0.4001 - val_loss: 22.6522 - val_rmse: 23.1478 - val_r2_keras: 0.1829\n",
            "Epoch 59/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 24.4375 - rmse: 24.9329 - r2_keras: 0.4190 - val_loss: 23.5665 - val_rmse: 24.0585 - val_r2_keras: 0.0816\n",
            "Epoch 60/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 24.4632 - rmse: 24.9578 - r2_keras: 0.4141 - val_loss: 22.4210 - val_rmse: 22.9176 - val_r2_keras: 0.2006\n",
            "Epoch 61/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 24.4701 - rmse: 24.9654 - r2_keras: 0.4186 - val_loss: 22.7300 - val_rmse: 23.2244 - val_r2_keras: 0.1644\n",
            "Epoch 62/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 24.4357 - rmse: 24.9308 - r2_keras: 0.4148 - val_loss: 22.9743 - val_rmse: 23.4676 - val_r2_keras: 0.1364\n",
            "Epoch 63/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 24.4884 - rmse: 24.9834 - r2_keras: 0.4168 - val_loss: 23.1302 - val_rmse: 23.6246 - val_r2_keras: 0.1207\n",
            "Epoch 64/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 23.9676 - rmse: 24.4624 - r2_keras: 0.4351 - val_loss: 22.4931 - val_rmse: 22.9880 - val_r2_keras: 0.1824\n",
            "Epoch 65/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 24.0811 - rmse: 24.5759 - r2_keras: 0.4267 - val_loss: 22.4894 - val_rmse: 22.9848 - val_r2_keras: 0.1804\n",
            "Epoch 66/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 24.1019 - rmse: 24.5971 - r2_keras: 0.4305 - val_loss: 22.5946 - val_rmse: 23.0896 - val_r2_keras: 0.1674\n",
            "Epoch 67/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 23.9934 - rmse: 24.4887 - r2_keras: 0.4355 - val_loss: 22.8796 - val_rmse: 23.3722 - val_r2_keras: 0.1384\n",
            "Epoch 68/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 23.6494 - rmse: 24.1444 - r2_keras: 0.4440 - val_loss: 22.4057 - val_rmse: 22.9007 - val_r2_keras: 0.1833\n",
            "Epoch 69/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 23.9190 - rmse: 24.4136 - r2_keras: 0.4358 - val_loss: 22.1686 - val_rmse: 22.6643 - val_r2_keras: 0.2048\n",
            "Epoch 70/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 23.7343 - rmse: 24.2288 - r2_keras: 0.4428 - val_loss: 21.8179 - val_rmse: 22.3143 - val_r2_keras: 0.2384\n",
            "Epoch 71/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 23.5822 - rmse: 24.0769 - r2_keras: 0.4465 - val_loss: 22.1394 - val_rmse: 22.6333 - val_r2_keras: 0.2051\n",
            "Epoch 72/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 23.6505 - rmse: 24.1455 - r2_keras: 0.4468 - val_loss: 22.1502 - val_rmse: 22.6445 - val_r2_keras: 0.2024\n",
            "Epoch 73/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 23.6135 - rmse: 24.1084 - r2_keras: 0.4506 - val_loss: 21.7773 - val_rmse: 22.2728 - val_r2_keras: 0.2368\n",
            "Epoch 74/500\n",
            "13304/13304 [==============================] - 1s 62us/step - loss: 23.6151 - rmse: 24.1098 - r2_keras: 0.4442 - val_loss: 21.8201 - val_rmse: 22.3152 - val_r2_keras: 0.2315\n",
            "Epoch 75/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 23.5760 - rmse: 24.0706 - r2_keras: 0.4458 - val_loss: 22.3525 - val_rmse: 22.8475 - val_r2_keras: 0.1801\n",
            "Epoch 76/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 23.5834 - rmse: 24.0783 - r2_keras: 0.4522 - val_loss: 22.2725 - val_rmse: 22.7675 - val_r2_keras: 0.1865\n",
            "Epoch 77/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 23.4119 - rmse: 23.9061 - r2_keras: 0.4566 - val_loss: 22.3617 - val_rmse: 22.8582 - val_r2_keras: 0.1772\n",
            "Epoch 78/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 23.6348 - rmse: 24.1293 - r2_keras: 0.4504 - val_loss: 21.7459 - val_rmse: 22.2418 - val_r2_keras: 0.2327\n",
            "Epoch 79/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 23.2958 - rmse: 23.7903 - r2_keras: 0.4593 - val_loss: 21.4718 - val_rmse: 21.9680 - val_r2_keras: 0.2573\n",
            "Epoch 80/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 23.1088 - rmse: 23.6033 - r2_keras: 0.4674 - val_loss: 21.5229 - val_rmse: 22.0186 - val_r2_keras: 0.2511\n",
            "Epoch 81/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 23.1956 - rmse: 23.6894 - r2_keras: 0.4607 - val_loss: 21.8084 - val_rmse: 22.3026 - val_r2_keras: 0.2229\n",
            "Epoch 82/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 23.1418 - rmse: 23.6365 - r2_keras: 0.4698 - val_loss: 21.9841 - val_rmse: 22.4795 - val_r2_keras: 0.2048\n",
            "Epoch 83/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 23.0104 - rmse: 23.5045 - r2_keras: 0.4691 - val_loss: 21.5236 - val_rmse: 22.0200 - val_r2_keras: 0.2464\n",
            "Epoch 84/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 23.1012 - rmse: 23.5961 - r2_keras: 0.4675 - val_loss: 21.6981 - val_rmse: 22.1920 - val_r2_keras: 0.2285\n",
            "Epoch 85/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 23.1775 - rmse: 23.6718 - r2_keras: 0.4640 - val_loss: 21.8239 - val_rmse: 22.3204 - val_r2_keras: 0.2155\n",
            "Epoch 86/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 23.1104 - rmse: 23.6055 - r2_keras: 0.4644 - val_loss: 22.0738 - val_rmse: 22.5687 - val_r2_keras: 0.1919\n",
            "Epoch 87/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 23.0169 - rmse: 23.5113 - r2_keras: 0.4732 - val_loss: 21.3360 - val_rmse: 21.8303 - val_r2_keras: 0.2572\n",
            "Epoch 88/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 22.9437 - rmse: 23.4383 - r2_keras: 0.4767 - val_loss: 21.2789 - val_rmse: 21.7740 - val_r2_keras: 0.2604\n",
            "Epoch 89/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 22.7965 - rmse: 23.2906 - r2_keras: 0.4787 - val_loss: 20.9192 - val_rmse: 21.4146 - val_r2_keras: 0.2910\n",
            "Epoch 90/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 22.8249 - rmse: 23.3191 - r2_keras: 0.4791 - val_loss: 21.5101 - val_rmse: 22.0058 - val_r2_keras: 0.2354\n",
            "Epoch 91/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 22.7452 - rmse: 23.2392 - r2_keras: 0.4798 - val_loss: 21.8327 - val_rmse: 22.3278 - val_r2_keras: 0.2045\n",
            "Epoch 92/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 22.6887 - rmse: 23.1833 - r2_keras: 0.4815 - val_loss: 21.2598 - val_rmse: 21.7553 - val_r2_keras: 0.2538\n",
            "Epoch 93/500\n",
            "13304/13304 [==============================] - 1s 70us/step - loss: 22.5047 - rmse: 22.9990 - r2_keras: 0.4905 - val_loss: 21.1849 - val_rmse: 21.6804 - val_r2_keras: 0.2589\n",
            "Epoch 94/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 22.7141 - rmse: 23.2087 - r2_keras: 0.4845 - val_loss: 20.8784 - val_rmse: 21.3722 - val_r2_keras: 0.2827\n",
            "Epoch 95/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 22.4638 - rmse: 22.9581 - r2_keras: 0.4931 - val_loss: 20.6979 - val_rmse: 21.1917 - val_r2_keras: 0.2967\n",
            "Epoch 96/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 22.3084 - rmse: 22.8029 - r2_keras: 0.4977 - val_loss: 21.0643 - val_rmse: 21.5594 - val_r2_keras: 0.2599\n",
            "Epoch 97/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 22.4973 - rmse: 22.9918 - r2_keras: 0.4900 - val_loss: 20.4117 - val_rmse: 20.9057 - val_r2_keras: 0.3152\n",
            "Epoch 98/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 22.4635 - rmse: 22.9574 - r2_keras: 0.4928 - val_loss: 20.8873 - val_rmse: 21.3815 - val_r2_keras: 0.2658\n",
            "Epoch 99/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 22.2774 - rmse: 22.7712 - r2_keras: 0.4963 - val_loss: 20.5919 - val_rmse: 21.0836 - val_r2_keras: 0.2861\n",
            "Epoch 100/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 22.0062 - rmse: 22.5000 - r2_keras: 0.5108 - val_loss: 20.6205 - val_rmse: 21.1150 - val_r2_keras: 0.2760\n",
            "Epoch 101/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 21.8442 - rmse: 22.3385 - r2_keras: 0.5121 - val_loss: 20.1241 - val_rmse: 20.6169 - val_r2_keras: 0.3100\n",
            "Epoch 102/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 21.8748 - rmse: 22.3690 - r2_keras: 0.5110 - val_loss: 20.2196 - val_rmse: 20.7150 - val_r2_keras: 0.2887\n",
            "Epoch 103/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 21.2288 - rmse: 21.7228 - r2_keras: 0.5368 - val_loss: 20.0309 - val_rmse: 20.5260 - val_r2_keras: 0.2926\n",
            "Epoch 104/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 21.1052 - rmse: 21.5992 - r2_keras: 0.5430 - val_loss: 19.3902 - val_rmse: 19.8855 - val_r2_keras: 0.3375\n",
            "Epoch 105/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 20.8746 - rmse: 21.3686 - r2_keras: 0.5466 - val_loss: 19.0759 - val_rmse: 19.5693 - val_r2_keras: 0.3537\n",
            "Epoch 106/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 20.7139 - rmse: 21.2079 - r2_keras: 0.5567 - val_loss: 18.6727 - val_rmse: 19.1667 - val_r2_keras: 0.3812\n",
            "Epoch 107/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 20.3175 - rmse: 20.8111 - r2_keras: 0.5662 - val_loss: 18.3659 - val_rmse: 18.8595 - val_r2_keras: 0.4005\n",
            "Epoch 108/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 20.4555 - rmse: 20.9494 - r2_keras: 0.5612 - val_loss: 18.0216 - val_rmse: 18.5163 - val_r2_keras: 0.4235\n",
            "Epoch 109/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 20.2062 - rmse: 20.6995 - r2_keras: 0.5700 - val_loss: 17.8989 - val_rmse: 18.3932 - val_r2_keras: 0.4303\n",
            "Epoch 110/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 20.0542 - rmse: 20.5475 - r2_keras: 0.5763 - val_loss: 17.5968 - val_rmse: 18.0912 - val_r2_keras: 0.4533\n",
            "Epoch 111/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 20.0025 - rmse: 20.4962 - r2_keras: 0.5811 - val_loss: 17.8352 - val_rmse: 18.3290 - val_r2_keras: 0.4312\n",
            "Epoch 112/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 19.9774 - rmse: 20.4710 - r2_keras: 0.5787 - val_loss: 17.9337 - val_rmse: 18.4282 - val_r2_keras: 0.4232\n",
            "Epoch 113/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 19.9042 - rmse: 20.3976 - r2_keras: 0.5852 - val_loss: 17.3295 - val_rmse: 17.8219 - val_r2_keras: 0.4697\n",
            "Epoch 114/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 19.7165 - rmse: 20.2099 - r2_keras: 0.5879 - val_loss: 17.2594 - val_rmse: 17.7512 - val_r2_keras: 0.4737\n",
            "Epoch 115/500\n",
            "13304/13304 [==============================] - 1s 67us/step - loss: 19.7571 - rmse: 20.2501 - r2_keras: 0.5853 - val_loss: 17.8812 - val_rmse: 18.3744 - val_r2_keras: 0.4230\n",
            "Epoch 116/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 19.6600 - rmse: 20.1529 - r2_keras: 0.5936 - val_loss: 17.4212 - val_rmse: 17.9136 - val_r2_keras: 0.4574\n",
            "Epoch 117/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 19.5715 - rmse: 20.0647 - r2_keras: 0.5884 - val_loss: 17.2989 - val_rmse: 17.7908 - val_r2_keras: 0.4660\n",
            "Epoch 118/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 19.7715 - rmse: 20.2646 - r2_keras: 0.5850 - val_loss: 17.4071 - val_rmse: 17.8993 - val_r2_keras: 0.4567\n",
            "Epoch 119/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 19.7173 - rmse: 20.2098 - r2_keras: 0.5860 - val_loss: 17.2183 - val_rmse: 17.7101 - val_r2_keras: 0.4697\n",
            "Epoch 120/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 19.7716 - rmse: 20.2644 - r2_keras: 0.5830 - val_loss: 17.1879 - val_rmse: 17.6796 - val_r2_keras: 0.4708\n",
            "Epoch 121/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 19.5990 - rmse: 20.0916 - r2_keras: 0.5878 - val_loss: 17.0126 - val_rmse: 17.5036 - val_r2_keras: 0.4836\n",
            "Epoch 122/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 19.7100 - rmse: 20.2027 - r2_keras: 0.5887 - val_loss: 17.1777 - val_rmse: 17.6692 - val_r2_keras: 0.4690\n",
            "Epoch 123/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 19.5493 - rmse: 20.0423 - r2_keras: 0.5901 - val_loss: 17.0486 - val_rmse: 17.5402 - val_r2_keras: 0.4775\n",
            "Epoch 124/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 19.3078 - rmse: 19.8004 - r2_keras: 0.5992 - val_loss: 17.1462 - val_rmse: 17.6382 - val_r2_keras: 0.4688\n",
            "Epoch 125/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 19.5765 - rmse: 20.0694 - r2_keras: 0.5898 - val_loss: 16.9941 - val_rmse: 17.4858 - val_r2_keras: 0.4798\n",
            "Epoch 126/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 19.2613 - rmse: 19.7540 - r2_keras: 0.6015 - val_loss: 17.3002 - val_rmse: 17.7933 - val_r2_keras: 0.4562\n",
            "Epoch 127/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 19.4710 - rmse: 19.9630 - r2_keras: 0.5937 - val_loss: 17.2899 - val_rmse: 17.7829 - val_r2_keras: 0.4562\n",
            "Epoch 128/500\n",
            "13304/13304 [==============================] - 1s 66us/step - loss: 19.5839 - rmse: 20.0764 - r2_keras: 0.5870 - val_loss: 17.2204 - val_rmse: 17.7130 - val_r2_keras: 0.4600\n",
            "Epoch 129/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 19.1370 - rmse: 19.6293 - r2_keras: 0.6061 - val_loss: 17.0734 - val_rmse: 17.5657 - val_r2_keras: 0.4714\n",
            "Epoch 130/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 19.2556 - rmse: 19.7475 - r2_keras: 0.5983 - val_loss: 16.5507 - val_rmse: 17.0421 - val_r2_keras: 0.5116\n",
            "Epoch 131/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 19.3461 - rmse: 19.8381 - r2_keras: 0.5950 - val_loss: 16.6649 - val_rmse: 17.1559 - val_r2_keras: 0.5008\n",
            "Epoch 132/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 19.4177 - rmse: 19.9095 - r2_keras: 0.5898 - val_loss: 17.0746 - val_rmse: 17.5669 - val_r2_keras: 0.4681\n",
            "Epoch 133/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 19.3295 - rmse: 19.8223 - r2_keras: 0.5965 - val_loss: 17.1008 - val_rmse: 17.5929 - val_r2_keras: 0.4658\n",
            "Epoch 134/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 19.2447 - rmse: 19.7368 - r2_keras: 0.5961 - val_loss: 17.0465 - val_rmse: 17.5388 - val_r2_keras: 0.4684\n",
            "Epoch 135/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 19.2876 - rmse: 19.7789 - r2_keras: 0.5959 - val_loss: 17.2559 - val_rmse: 17.7476 - val_r2_keras: 0.4516\n",
            "Epoch 136/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 19.1079 - rmse: 19.6000 - r2_keras: 0.6036 - val_loss: 16.9903 - val_rmse: 17.4829 - val_r2_keras: 0.4709\n",
            "Epoch 137/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 19.2033 - rmse: 19.6952 - r2_keras: 0.6019 - val_loss: 16.8594 - val_rmse: 17.3509 - val_r2_keras: 0.4797\n",
            "Epoch 138/500\n",
            "13304/13304 [==============================] - 1s 63us/step - loss: 19.0843 - rmse: 19.5763 - r2_keras: 0.6040 - val_loss: 17.9881 - val_rmse: 18.4809 - val_r2_keras: 0.3954\n",
            "Epoch 139/500\n",
            "13304/13304 [==============================] - 1s 65us/step - loss: 19.3180 - rmse: 19.8097 - r2_keras: 0.5972 - val_loss: 16.6519 - val_rmse: 17.1429 - val_r2_keras: 0.4946\n",
            "Epoch 140/500\n",
            "13304/13304 [==============================] - 1s 64us/step - loss: 19.2928 - rmse: 19.7844 - r2_keras: 0.5910 - val_loss: 16.8806 - val_rmse: 17.3719 - val_r2_keras: 0.4771\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "J6aR6woKv8ok",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#load the best state of the model\n",
        "model= load_model(\"my_checkpoint.h5\", custom_objects={'r2_keras': r2_keras,'rmse':rmse})"
      ],
      "execution_count": 17,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4TsLT1ZoFdOw",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        ""
      ],
      "execution_count": 17,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ii42B87R9Buo",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "556f2f6b-7b67-4a1b-df10-17def76d37f8"
      },
      "source": [
        "# generate test sequences and convert to numpy array\n",
        "test_gen = (list(gen_sequence(test_data[test_data['id']==id], sequence_length,\n",
        "            sequence_cols)) for id in test_data['id'].unique())\n",
        "\n",
        "# generate sequences and convert to numpy array\n",
        "test_gen = np.concatenate(list(test_gen)).astype(np.float32)\n",
        "#print(seq_array_test_last)\n",
        "print(test_gen.shape)"
      ],
      "execution_count": 18,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(155, 40, 14)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-VfMsfpS9YA1",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "a1c15460-f7f8-4b29-ffa9-1a8e8d0e785c"
      },
      "source": [
        "# generate test labels\n",
        "test_target = [gen_labels(test_data[test_data['id']==id], sequence_length,\n",
        "               ['R_early']) for id in test_data['id'].unique()]\n",
        "\n",
        "y_true = np.concatenate(test_target).astype(np.float32)\n",
        "y_true.shape"
      ],
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(155, 1)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 19
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "61nP-WOpv8or",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#predict on the test data\n",
        "RUL_pred = model.predict(test_gen)"
      ],
      "execution_count": 20,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gUQizaNc5Cg3",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "05b36d08-6922-4770-898d-a3694f525bf6"
      },
      "source": [
        "RUL_pred.shape"
      ],
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(155, 1)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 21
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "KQiStE-aPBr9",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "708dbe77-50fd-4729-fcca-e38689d31f8a"
      },
      "source": [
        "y_true.shape"
      ],
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(155, 1)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 22
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Dv2lDZkY5Ch7",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 265
        },
        "outputId": "8d903036-0cd5-47a9-bf82-695d34fbb62c"
      },
      "source": [
        "#Plot the predicted versus true RUL trend\n",
        "time = np.arange(test_gen.shape[0])\n",
        "plt.plot(time,RUL_pred)\n",
        "plt.plot(time, y_true)\n",
        "plt.show()"
      ],
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "tags": [],
        "id": "Xcm3s65S5CiV",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 313
        },
        "outputId": "ad45356a-afb7-4773-9633-1d97d78f2bc8"
      },
      "source": [
        "#Plot the losses  \n",
        "print(history.history.keys())\n",
        "# \"Loss\"\n",
        "plt.plot(history.history['loss'])\n",
        "plt.plot(history.history['val_loss'])\n",
        "plt.title('model loss')\n",
        "plt.ylabel('loss')\n",
        "plt.xlabel('epoch')\n",
        "plt.legend(['train', 'validation'], loc='upper left')\n",
        "plt.show()"
      ],
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "dict_keys(['val_loss', 'val_rmse', 'val_r2_keras', 'loss', 'rmse', 'r2_keras'])\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mVHwSFLu3fiM",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "df950e19-c35d-4a68-c688-66d5bde7d947"
      },
      "source": [
        "#Estimate the model average rmse\n",
        "final_mse = keras.metrics.mean_squared_error(y_true, RUL_pred)\n",
        "final_rmse = np.sqrt(final_mse)\n",
        "final_rmse\n",
        "np.mean(final_rmse)"
      ],
      "execution_count": 25,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "9.257155"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 25
        }
      ]
    }
  ]
}